import pandas as pd
import numpy as np
from sklearn import preprocessing
df = pd.read_csv('iris.data')
enc=preprocessing.LabelEncoder()   #获取一个LabelEncoder
enc=enc.fit(['Iris-setosa','Iris-versicolor','Iris-virginica'])  #训练LabelEncoder
df['e']=enc.transform(df['e'])
def readset(a,b,c,d,df):
    df=df.iloc[a:b, c:d]
    print(df)
    # 无量纲化
    # for i in range(b-1,0,-1):
    #     df.iloc[i,:] = df.iloc[i, :] / df.iloc[0, :]
    # print(df)
    #均值法
    #(d-c)即所选列数，加1减1抵消
    #(d-c-1)即接受dataframe后的最后一列（列标）
    for i in range(d-c-1):
        df.iloc[:,i] = df.iloc[:,i].apply(lambda x:(x/df.iloc[:,i].mean()))
    print(df)
    #差序列
    for i in range(d-c-2,-1,-1):
        df.iloc[:,i] = abs(df.iloc[:,i]-df.iloc[:,d-c-1])
    # 删除比较序列
    df.drop(df.columns[d-c-1], axis=1,inplace=True)
    # 每列最大值，最小值
    min=df.stack().min()
    max=df.stack().max()
    # 分辨系数p
    p=0.5
    # 对每个元素应用公式
    df=df.applymap(lambda x: (min + p * max) / (x + p * max))
    # 所有列均值，返回一个series序列，axis=1 返回所有行的均值
    a=df.mean(axis=0)
    # 拼接均值series到dataframe最后一列
    df = df.append(a, ignore_index=True)
    print(df)
    # 按照均值的值对series排序
    sorted = a.sort_values(ascending=True)
    # for value in sorted.keys():
    #     print(value)
    # 把排序后的索引转换为列表
    list1 = (sorted.index).to_list()
    # 把排序后的值转换为列表
    list2 = sorted.to_list()
    print(list1)
    print(list2)
    # for i in list1:
    #     print(a[i])
    # 行数+1
readset(0,150,0,5,df)


